﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Proyecto_e.Models;
using System.Drawing;
using System.IO;
using System.Drawing.Imaging;

namespace Proyecto_e.Controllers
{
    public class EncuestaController : Controller
    {
        ModeloPregunta mPregunta = new ModeloPregunta();
        ModeloEncuesta mEncuesta = new ModeloEncuesta();
        ModeloRespuesta mRespuesta = new ModeloRespuesta();
        ModeloRespPregunta mRespregunta = new ModeloRespPregunta();

        proyecto_eEntities1 proyecto = new proyecto_eEntities1();

        public ActionResult Inicio_Admin()
        {
            //List<encuesta> y = m_e.listarBD();
            return View(proyecto.encuesta.ToList());
        }

        ModeloEncuesta manejadorEncuesta = new ModeloEncuesta();
        ModeloUsuario manejadorUsuario = new ModeloUsuario();


        public ActionResult ListarEncuestasUsuario(int id)
        {
            ViewData["ID"] = id;
            return View(manejadorEncuesta.getEncuestasUsuario(id));
        }

        public ActionResult ListarEncuestas()
        {
            return View(manejadorEncuesta.ListarEncuestas());
        }

        public ActionResult Create1()
        {
            List<Pregunta> preguntas;
            preguntas = new List<Pregunta>();
            Session["Preguntas"] = preguntas;

            Encuesta EncuestaActual;
            EncuestaActual = new Encuesta();

            Session["EncuestaActual"] = EncuestaActual;

            return RedirectToAction("Create", "Encuesta");
        }

        public ActionResult Create()
        {

            List<Pregunta> preguntas;
            preguntas = new List<Pregunta>();
            preguntas = (List<Pregunta>)Session["Preguntas"];


            List<string> enunciados;
            enunciados = new List<string>();
            foreach (Pregunta p in preguntas)
            {
                enunciados.Add(p.enunciado);
            }


            Encuesta EncuestaActual;
            EncuestaActual = new Encuesta();
            EncuestaActual = (Encuesta)Session["EncuestaActual"];
            ViewData["titulo"] = EncuestaActual.titulo;
            ViewData["descripcion"] = EncuestaActual.descripcion;
            ViewData["imagen"] = EncuestaActual.imagen;
            ViewData["MyList"] = enunciados;


            return View();
        }


        public ActionResult guardar()
        {
            Encuesta EncuestaActual;
            EncuestaActual = new Encuesta();
            EncuestaActual = (Encuesta)Session["EncuestaActual"];
            EncuestaActual.id_usuario = (Int32)Session["ID"];
            EncuestaActual.url = Crearurl();
            mEncuesta.insertarBD(EncuestaActual);

            EncuestaActual.id_encuesta = manejadorEncuesta.id_ultima_encuesta(EncuestaActual.id_usuario);
            List<Pregunta> preguntas;

            preguntas = new List<Pregunta>();
            preguntas = (List<Pregunta>)Session["Preguntas"];

            foreach (Pregunta p in preguntas)
            {
                p.id_usuario = EncuestaActual.id_usuario;
                p.id_encuesta = EncuestaActual.id_encuesta;
                mPregunta.insertarBD(p);

                p.id_pregunta = mPregunta.id_ultima_pregunta(p.id_usuario, EncuestaActual.id_encuesta);

                foreach (string r in p.get_respuestas_vector())
                {
                    respuesta res = new respuesta();
                    res.ID_ENCUESTA = EncuestaActual.id_encuesta;
                    res.ID_PREGUNTA = p.id_pregunta;
                    res.ID_USUARIO = EncuestaActual.id_usuario;
                    res.ENUNCIADO = r;
                    mRespuesta.insertarBD(res);
                }

            }

            int id = (Int32)Session["ID"];
            return RedirectToAction("ListarEncuestasUsuario", "Encuesta", new { id });
        }



        public ActionResult actualizar()
        {
            Encuesta EncuestaActual;
            EncuestaActual = new Encuesta();
            EncuestaActual = (Encuesta)Session["EncuestaActual"];
            EncuestaActual.id_usuario = (Int32)Session["ID"];
            EncuestaActual.url = Crearurl();
            EncuestaActual.id_encuesta = (Int16.Parse((string)Session["ID_ENCUESTA_EDITAR"]));
            mEncuesta.actualizarBD(EncuestaActual);

            List<Pregunta> preguntas;

            preguntas = new List<Pregunta>();
            preguntas = (List<Pregunta>)Session["Preguntas"];

            foreach (Pregunta p in preguntas)
            {
                p.id_usuario = EncuestaActual.id_usuario;
                p.id_encuesta = EncuestaActual.id_encuesta;
                mPregunta.insertarBD(p);

                p.id_pregunta = mPregunta.id_ultima_pregunta(p.id_usuario, EncuestaActual.id_encuesta);
                mRespuesta.eliminar(EncuestaActual.id_encuesta, EncuestaActual.id_usuario);
                foreach (string r in p.get_respuestas_vector())
                {
                    respuesta res = new respuesta();
                    res.ID_ENCUESTA = EncuestaActual.id_encuesta;
                    res.ID_PREGUNTA = p.id_pregunta;
                    res.ID_USUARIO = EncuestaActual.id_usuario;
                    res.ENUNCIADO = r;
                    mRespuesta.insertarBD(res);
                }

            }

            int id = (Int32)Session["ID"];
            return RedirectToAction("ListarEncuestasUsuario", "Encuesta", new { id });
        }

        public ActionResult eliminar(string id)
        {
            int id_usuario = (Int32)Session["ID"];
            manejadorEncuesta.eliminarBD(id);
            return RedirectToAction("ListarEncuestasUsuario", new { id = id_usuario });
        }

        public ActionResult editar(string id)
        {
            int id_usuario = (Int32)Session["ID"];
            Session["ID_ENCUESTA_EDITAR"] = id;
            Encuesta EncuestaActual;
            EncuestaActual = new Encuesta();
            encuesta e = new encuesta();
            e = manejadorEncuesta.getEncuesta(id_usuario, int.Parse(id));
            EncuestaActual.id_encuesta = e.ID_ENCUESTA;
            EncuestaActual.id_usuario = e.ID_USUARIO;
            EncuestaActual.titulo = e.TITULO;
            EncuestaActual.imagen = "";
            EncuestaActual.estado = e.ESTADO;
            EncuestaActual.descripcion = e.DESCRIPCION;
            EncuestaActual.url = e.URL;

            Session["EncuestaActual"] = EncuestaActual;

            List<Pregunta> preguntas;
            preguntas = new List<Pregunta>();

            List<pregunta> preguntasActuales;
            preguntasActuales = new List<pregunta>();
            preguntasActuales = mPregunta.ListarPreguntas(int.Parse(id), id_usuario);

            foreach (pregunta p in preguntasActuales)
            {
                Pregunta pr = new Pregunta();
                pr.id_pregunta = p.ID_PREGUNTA;
                pr.id_encuesta = p.ID_ENCUESTA;
                pr.id_usuario = p.ID_USUARIO;
                pr.set_tipo_pregunta((Int32)p.ID_TIPO_PREGUNTA);
                pr.enunciado = p.ENUNCIADO;

                List<respuesta> respuestas;
                respuestas = new List<respuesta>();

                respuestas = mRespuesta.ListarRespuestas(pr.id_encuesta, pr.id_usuario, pr.id_pregunta);
                pr.set_respuestas_vector(respuestas);
                preguntas.Add(pr);
            }

            Session["Preguntas"] = preguntas;

            List<Pregunta> preg;
            preg = new List<Pregunta>();
            preg = (List<Pregunta>)Session["Preguntas"];

            List<string> enunciados;
            enunciados = new List<string>();
            foreach (Pregunta p in preguntas)
            {
                enunciados.Add(p.enunciado);
            }

            ViewData["titulo"] = EncuestaActual.titulo;
            ViewData["descripcion"] = EncuestaActual.descripcion;
            ViewData["imagen"] = EncuestaActual.imagen;
            ViewData["MyList"] = enunciados;

            return View();

        }

        public ActionResult ver(string id)
        {

            int id_usuario = (Int32)Session["ID"];
            Encuesta EncuestaActual;
            EncuestaActual = new Encuesta();
            encuesta e = new encuesta();
            e = manejadorEncuesta.getEncuesta(id_usuario, int.Parse(id));
            EncuestaActual.id_encuesta = e.ID_ENCUESTA;
            EncuestaActual.id_usuario = e.ID_USUARIO;
            EncuestaActual.titulo = e.TITULO;
            EncuestaActual.imagen = "";
            EncuestaActual.estado = e.ESTADO;
            EncuestaActual.descripcion = e.DESCRIPCION;
            EncuestaActual.url = e.URL;


            List<Pregunta> preguntas;
            preguntas = new List<Pregunta>();

            List<pregunta> preguntasActuales;
            preguntasActuales = new List<pregunta>();
            preguntasActuales = mPregunta.ListarPreguntas(int.Parse(id), id_usuario);

            foreach (pregunta p in preguntasActuales)
            {
                Pregunta pr = new Pregunta();
                pr.id_pregunta = p.ID_PREGUNTA;
                pr.id_encuesta = p.ID_ENCUESTA;
                pr.id_usuario = p.ID_USUARIO;
                pr.set_tipo_pregunta((Int32)p.ID_TIPO_PREGUNTA);
                pr.enunciado = p.ENUNCIADO;

                List<respuesta> respuestas;
                respuestas = new List<respuesta>();

                respuestas = mRespuesta.ListarRespuestas(pr.id_encuesta, pr.id_usuario, pr.id_pregunta);
                pr.set_respuestas_vector(respuestas);
                pr.set_respuestas_list(respuestas);
                preguntas.Add(pr);
            }

            ViewData["titulo"] = EncuestaActual.titulo;
            ViewData["descripcion"] = EncuestaActual.descripcion;
            ViewData["imagen"] = EncuestaActual.imagen;
            ViewData["estado"] = EncuestaActual.estado;
            ViewData["url"] = EncuestaActual.url;
            ViewData["preguntas"] = preguntas;
            return View();

        }

        public ActionResult encuestaResp(string id)
        {

            if (mEncuesta.validar_url(id))
            {
                if (mEncuesta.validar_estado(id))
                {
                    string id_usuario, id2;

                    id_usuario = id.Split('_')[0];
                    id2 = id.Split('_')[2];

                    Encuesta EncuestaActual;
                    EncuestaActual = new Encuesta();
                    encuesta e = new encuesta();
                    e = manejadorEncuesta.getEncuesta(int.Parse(id_usuario), int.Parse(id2));
                    EncuestaActual.id_encuesta = e.ID_ENCUESTA;
                    EncuestaActual.id_usuario = e.ID_USUARIO;
                    EncuestaActual.titulo = e.TITULO;
                    EncuestaActual.imagen = "";
                    EncuestaActual.estado = e.ESTADO;
                    EncuestaActual.descripcion = e.DESCRIPCION;
                    EncuestaActual.url = e.URL;


                    List<Pregunta> preguntas;
                    preguntas = new List<Pregunta>();

                    List<pregunta> preguntasActuales;
                    preguntasActuales = new List<pregunta>();
                    preguntasActuales = mPregunta.ListarPreguntas(int.Parse(id2), int.Parse(id_usuario));

                    foreach (pregunta p in preguntasActuales)
                    {
                        Pregunta pr = new Pregunta();
                        pr.id_pregunta = p.ID_PREGUNTA;
                        pr.id_encuesta = p.ID_ENCUESTA;
                        pr.id_usuario = p.ID_USUARIO;
                        pr.set_tipo_pregunta((Int32)p.ID_TIPO_PREGUNTA);
                        pr.enunciado = p.ENUNCIADO;

                        List<respuesta> respuestas;
                        respuestas = new List<respuesta>();

                        respuestas = mRespuesta.ListarRespuestas(pr.id_encuesta, pr.id_usuario, pr.id_pregunta);
                        pr.set_respuestas_vector(respuestas);
                        pr.set_respuestas_list(respuestas);
                        preguntas.Add(pr);
                    }

                    ViewData["titulo"] = EncuestaActual.titulo;
                    ViewData["descripcion"] = EncuestaActual.descripcion;
                    ViewData["imagen"] = EncuestaActual.imagen;
                    ViewData["estado"] = EncuestaActual.estado;
                    ViewData["preguntas"] = preguntas;
                    Session["Preguntas"] = preguntas;
                    return View();
                }
                else
                {
                    Session["respuesta enviada"] = "Lo sentimos la encuesta se encuentra cerrada";
                    return RedirectToAction("enviado");
                }
            }
            else
            {
                Session["respuesta enviada"] = "URL DE ENCUESTA INCORRECTA";
                return RedirectToAction("enviado");
            }
        }

        [HttpPost()]
        public ActionResult guardarResp()
        {
            List<Pregunta> preguntas;
            preguntas = new List<Pregunta>();
            preguntas = (List<Pregunta>)Session["Preguntas"];
            int preg = 1;
            foreach (Pregunta p in preguntas)
            {
                if (p.id_tipo_pregunta.CompareTo("Respuesta única") == 0)
                {

                    var a = this.Request.Form["opcion " + preg];
                    mRespregunta.insertarBD(int.Parse(a), p.id_pregunta, p.id_encuesta, p.id_usuario);
                    preg++;
                }
                else if (p.id_tipo_pregunta.CompareTo("Respuesta desplegable") == 0)
                {

                    var a = this.Request.Form[preg + " "];
                    mRespregunta.insertarBD(int.Parse(a), p.id_pregunta, p.id_encuesta, p.id_usuario);
                    preg++;
                }
                else if (p.id_tipo_pregunta.CompareTo("Múltiple respuesta") == 0)
                {
                    int resp = 1;
                    foreach (string respuesta in (List<string>)p.respuestasList)
                    {
                        if (this.Request.Form[preg + " " + resp] != null)
                        {
                            var a = this.Request.Form[preg + " " + resp];
                            mRespregunta.insertarBD(int.Parse(a), p.id_pregunta, p.id_encuesta, p.id_usuario);
                        }
                        resp++;
                    }
                    preg++;
                }
                else if (p.id_tipo_pregunta.CompareTo("Respuesta abierta") == 0)
                {
                    int resp = 1;
                    foreach (string respuesta in (List<string>)p.respuestasList)
                    {
                        var a = this.Request.Form[preg + " " + "text"];
                        mRespregunta.insertarBDabierta(p.id_pregunta, p.id_encuesta, a + "", p.id_usuario);
                        resp++;
                    }
                    preg++;
                }
            }
            Session["respuesta enviada"] = "Encuesta Enviada Con Exito";
            return RedirectToAction("enviado");
        }

        public ActionResult enviado()
        {
            return View();
        }

        public ActionResult AdminCreate()
        {
            return View();
        }



        public ActionResult AdminListarEncuestasUsuario(int id)
        {
            ViewData["ID"] = id;
            return View(manejadorEncuesta.getEncuestasUsuario(id));
        }

        public ActionResult AdminVer(int id)
        {
            return View(manejadorEncuesta.delallarencuesta(id));
        }

        public string Crearurl()
        {
            Random r = new Random();
            string numAleatorio;
            int id = (Int32)Session["ID"];
            numAleatorio = Session["ID"] + "_" + r.Next(2, r.Next(10000, 1000000)) + "_" + manejadorEncuesta.id_ultima_encuesta(id);
            return numAleatorio;
        }

    }
}
